package net.freestu.sola.web.util;

import java.util.ArrayList;

public class TagOperator {

	/**
	 * (一定要增强这个函数的容错性)
	 * 取<tag>xxx</tag>中间的XXX
	 * 如果<tag cont="dd">ddd</tag>则提取ddd,忽略属性。
	 * @param tags
	 * @param tage
	 * @param string
	 * @return
	 */
	public static ArrayList digContentOfTag(String tags, String tage,
			String string) {

		ArrayList container = new ArrayList();
		
	    	String pur=tags.replace("<", "").replace(">", "");
		
		try {
			string = string.replace(pur.toUpperCase(), pur);
			//string=string.replace(tage.toUpperCase(),tage);//将大写转化为小写。
		} catch (java.lang.NullPointerException e) {
			 return null;
		}		
		String thetags = tags.replace("<", "").replace(">", "");

		String regex = "<" + thetags + ".*?>";
		String thestring = string.replaceAll(regex, tags);// 得到过滤后的文本。
		String str = "";
		int s = thestring.indexOf(tags);
		int e = thestring.indexOf(tage,s);//貌似应该修改成这个。
		if(e==-1){
			if(pur=="body"||pur=="html"){
			e=thestring.length();//这里主要是处理<body><html>中可以不写</body>这种不规则的网页。
			}else{
				return null;//容错
			}
		}

		while (s != -1) {
			
			
			str = thestring.substring(s, e);// 粗略截取
			
			
			String gain = str.replaceFirst(tags, "");
		    String gain1 = gain.replaceAll("\\s", "");

			if (!gain1.equals("")) {

				container.add(gain);
			}
			s = thestring.indexOf(tags, e);
			e = thestring.indexOf(tage, s);
		}
		return container;
	}
	
	
	/**
	 * 这个地方返回这个<a xxxxx  >中的字符xxxxx.自动将两边的空格去掉。
	 * @param tag     tag =a。全部规定为小写。
	 * @param string  网页的内容。
	 * @return 一个ArrayList
	 */
	public static ArrayList digSingleTag(String tag, String string) {

		ArrayList result = new ArrayList();

		String tags = "<" + tag;// 标签开始
		String tage = ">";

		String str = "";

		string = string.replace(tag.toUpperCase(),tag);// 这里是为了忽略A和a的区别。将其原匹配字符串全部转化为小写。

		int s = string.indexOf(tags);
		
		if(s==-1) return null;//增加容错能力。
		

		while (true) {

			s = string.indexOf(tags,s);
			if(s==-1) break;
			int e = string.indexOf(tage, s);// 貌似应该修改成这个。
			//System.out.println(s);
			//System.out.println(e);
			str = string.substring(s + 2, e);// href="http://www.baidu.com"

			if ((str != null)&&(str!="")) {
				result.add(str.trim());
			}
			s=e+1;
		}
		return result;
	}
	
	
	/**
	 * 还需要写一个程序，专门是提取<meta xxxxx/>中间的的xxxxx的东西。
	 * @return
	 */
	public static ArrayList digSingleTag2(){
		
		return null;
	} 
	
	
	public static void main(String[] args){
		
		ArrayList  al=digContentOfTag("<body>","</body>","<BODY><a href =\"bbs/logging.php?action=login\" target=\"_self\"></BODY>");
		if(al==null){
			System.out.println("ddd");
		}
		System.out.println(al);
	}
}
